/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package contoladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import vista.VProducto;
import modelos.MCategoria;
import modelos.MIngrediente;
import modelos.MProducto;

/**
 *
 * @author usuario
 */
public class CProducto implements ActionListener{

    private VProducto vista;
    private MProducto modelo;
    private Vector <MCategoria> categorias;
    private Vector<MIngrediente> ingredientes;

    public CProducto(VProducto aThis) {
        vista=aThis;
        modelo= new MProducto();
        categorias= new MCategoria().listar();
        ingredientes= new  MIngrediente().listar();
        cargarCombosVista();
        vista.addListener(this);
        
    }
    
    private boolean validarCamposVacios(){
    	if(vista.getCod().equals("") || vista.getDes().equals("") || vista.getPre().equals(""))
    		return false;
    	else
    		return true;    		
    }
  
    private boolean validarPrecio(){
            try{
                if(Double.parseDouble(vista.getPre())<=0)
                	return false;
            }catch(NumberFormatException ex){
                return false;
            }

        return true;
    }


    public void cargarCombosVista(){
        Vector<String> descripciones = new Vector<String>();
        for (int i = 0; i < ingredientes.size(); i++)
            descripciones.add(ingredientes.elementAt(i).getDes_Ingrediente());
        vista.cargarIngredientes(descripciones);
        descripciones = new Vector<String>();
        for (int i = 0; i < categorias.size(); i++)
            descripciones.add(categorias.elementAt(i).getDes_Categoria());
        vista.cargarCategorias(descripciones);
    }


     public void actionPerformed(ActionEvent ae) {
    	 if(ae.getActionCommand().equals("Agregar")){
    		 agregar();
    	 }
    	 else if(ae.getActionCommand().equals("Salir")){
             salir();
         }
    	 else if(ae.getActionCommand().equals("Cancelar")){
    		 cancelar();
         }
    	 else if(ae.getActionCommand().equals("Mas")){
    		 mas();
         } 
    	 else if(ae.getActionCommand().equals("Menos")){
    		 menos();             
    	 }             
    }

      private void menos() {
		vista.quitar();
		
	}


	private void mas() {
		vista.agregar();
		
	}


	private void cancelar() {
		vista.limpiar();
	}


	private void salir() {
		vista.hide();
	}


	private void agregar() {
		if(validarCamposVacios())
			if(validarPrecio()){
				modelo.setCod_Producto(vista.getCod());
				modelo.setCod_Categoria(codigoCategoria(vista.getCat()));
				modelo.setPrecio_Producto(Double.parseDouble(vista.getPre()));
				modelo.setDesc_Producto(vista.getDes());
				modelo.setEstatus("A");
				if(modelo.registar()){
					registrarIngredientes();
					JOptionPane.showMessageDialog(new JFrame(),"Ingrediente registrado con exito","Proyecto 2",JOptionPane.INFORMATION_MESSAGE);
					vista.limpiar();
				}
				else
					JOptionPane.showMessageDialog(new JFrame(),"El codigo no esta registrado","Proyecto 2",JOptionPane.WARNING_MESSAGE);
			}
			else
				JOptionPane.showMessageDialog(new JFrame(),"Precio no valido","Proyecto 2",JOptionPane.WARNING_MESSAGE);
		else
			JOptionPane.showMessageDialog(new JFrame(),"El codigo se encuentra vacio por favor ingreselo","Proyecto 2",JOptionPane.WARNING_MESSAGE);

			
		
	}


	private void registrarIngredientes() {
		Vector<String> codigos = new Vector<String>();
		Vector<Double> cantidades = new Vector<Double>();
		DefaultTableModel m = vista.getModelo();
		int i = 0;
		while(i<m.getRowCount()){
			codigos.add(codigoIngrediente((String) m.getValueAt(i, 0)));
			cantidades.add(Double.parseDouble((String) m.getValueAt(i, 1)));
			i++;
		}
		modelo.registarIngredientes(codigos, cantidades);
	}
      
    

       public String codigoCategoria(String descripicion){
          for (int i = 0; i < categorias.size(); i++)
              if(categorias.elementAt(i).getDes_Categoria().equals(descripicion))
                  return categorias.elementAt(i).getCod_Categoria();
          return "";
       }
       
       public String codigoIngrediente(String descripicion){
          for (int i = 0; i < ingredientes.size(); i++)
              if(ingredientes.elementAt(i).getDes_Ingrediente().equals(descripicion))
                  return ingredientes.elementAt(i).getCod_Ingrediente();
          return "";
       }     

  
    

}
